<?php

/**
 * Dieser Query dient dazu debug Ausgaben zu sammeln und an einer bestimmten Stelle
 * formatiert und geordnet auszugeben.
 * 
 * @author Shane
 * 
 * @example $debug = DebugQuery::getInstance();
 */
class DebugQuery {
	
	// singleton
	private static $instance;
	
	// Die query in der ale Ausgaben abgelegt werden
	private $query = array();
	
	/**
	 * Gibt die singleton Instanz des DebugQuery zurück.
	 */
	static public function getInstance() {
		if (!isset(self::$instance)) {
			self::$instance = new DebugQuery();
		}
		
		return self::$instance;
	}
	
	/**
	 * Konstruktor tut nix
	 */
	function __construct() {
	}
	
	/**
	 * Dieser Methode kann man die Parameter genau so übergeben, wie
	 * einem printf. Die Argumente werden in einer Arraystruktur gespeichert
	 * und in einer anderen Methode mittels vprintf ausgegeben.
	 * 
	 */
	public function append() {
		// Alle Argumente auslesen
		$args = func_get_args();
		
		// Die Argumente werden in einem array gespeichert
		$msg = array();
		
		// Das Format (das erste Argument) wird ausgelesen
		$msg['format'] 	= $args[0];
		
		// Der Rest wird wiederum in einem Array gespeichert
		$msg['args']	= array();
		
		// Alle Argumente nach index pos 0 werden nacheinander in das array gelegt
		foreach($args as $index => $arg) {
			if($index > 0)
				$msg['args'][] = $arg;
		}
		
		// Das array wird der query hinzugefügt
		$this->query[] = $msg;
	}
	
	/**
	 * Diese Methode gibt nacheinander alle Positionen
	 * des debug Stack via vprintf aus.
	 */
	public function print_debug_stack() {
		
		// Über alle gesammelten debug Einträge iterieren
		foreach($this->query as $msg) {
			
			// Debug Eintrag ausgeben
			vprintf($msg['format'], $msg['args']);
		}
	}
}

?>